/**
  @file     	DESIGNPATTERN_Singleton.h
  @brief    	To ensure that a class has only one instance
  @author  	arvin
  @version 	1.0   2012/12/12
 */

#ifndef CXX_DESIGNPATTERN_SINGLETON_H
#define CXX_DESIGNPATTERN_SINGLETON_H

class Singleton
{
public:
	/**
	* Destruction
	*
	* @param VOID
	* @return 
	*/
	~Singleton();

	/**
	* Instance
	*
	* @param VOID
	* @return Singleton*
	* @note singleton
	*/
	static Singleton* Instance();
	
	/**
	* Destroy
	*
	* @param VOID
	* @return VOID
	* @note singleton
	*/
	static VOID Destroy();
protected:
private:
	/**
	* Construction
	*
	* @param VOID
	* @return 
	*/
	Singleton();

	/**
	* Copy Construction
	*
	* @param const Singleton& cSingleton
	* @return 
	*/
	Singleton(const Singleton& cSingleton);

	/**
	* Assignment
	*
	* @param const Singleton& cSingleton
	* @return Singleton&
	*/
	Singleton& operator=(const Singleton& cSingleton);

public:
protected:
private:
	static Singleton* m_pInstance;
};
#endif	/* >>CXX_DESIGNPATTERN_SINGLETON_H<< */
/* EOF */